/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/

KindEditor.plugin('media', function(K) {
	var self = this, name = 'media', lang = self.lang(name + '.'),
		allowMediaUpload = K.undef(self.allowMediaUpload, true),
		allowFileManager = K.undef(self.allowFileManager, false),
		formatUploadUrl = K.undef(self.formatUploadUrl, true),
		extraParams = K.undef(self.extraFileUploadParams, {}),
		filePostName = K.undef(self.filePostName, 'imgFile'),
		uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php');
	self.plugin.media = {
		edit : function() {
			var html = [
				'<div style="padding:20px;">',
				//url
				'<div class="ke-dialog-row">',
				'<label for="keUrl" style="width:60px;">' + lang.url + '</label>',
				'<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:160px;" /> &nbsp;',
				'<input type="button" class="ke-upload-button" value="' + lang.upload + '" /> &nbsp;',
				'<span class="ke-button-common ke-button-outer">',
				'<input type="button" class="ke-button-common ke-button" name="viewServer" value="' + lang.viewServer + '" />',
				'</span>',
				'</div>',
				//width
				'<div class="ke-dialog-row">',
				'<label for="keWidth" style="width:60px;">' + lang.width + '</label>',
				'<input type="text" id="keWidth" class="ke-input-text ke-input-number" name="width" value="550" maxlength="4" />',
				'</div>',
				//height
				'<div class="ke-dialog-row">',
				'<label for="keHeight" style="width:60px;">' + lang.height + '</label>',
				'<input type="text" id="keHeight" class="ke-input-text ke-input-number" name="height" value="400" maxlength="4" />',
				'</div>',
				//autostart
				'<div class="ke-dialog-row">',
				'<label for="keAutostart">' + lang.autostart + '</label>',
				'<input type="checkbox" id="keAutostart" name="autostart" value="" /> ',
				'</div>',
				'</div>'
			].join('');
			var dialog = self.createDialog({
				name : name,
				width : 450,
				height : 230,
				title : self.lang(name),
				body : html,
            yesBtn: {
                name: self.lang('yes'),
                click: function(e) {
                    var url = K.trim(urlBox.val()),
                      width = widthBox.val(),
                      height = heightBox.val();

                    if (url == 'http://' || K.invalidUrl(url)) {
                        alert(self.lang('invalidUrl'));
                        urlBox[0].focus();
                        return;
                    }
                    if (!/^\d*$/.test(width)) {
                        alert(self.lang('invalidWidth'));
                        widthBox[0].focus();
                        return;
                    }
                    if (!/^\d*$/.test(height)) {
                        alert(self.lang('invalidHeight'));
                        heightBox[0].focus();
                        return;
                    }

                    // 判断是否视频
                    var videoExts = ['.mp4','.avi','.mov','.wmv','.flv','.mpeg','.webm','.ogg'];
                    var ext = url.substring(url.lastIndexOf('.')).toLowerCase();

                    var html = '';
                    if (videoExts.indexOf(ext) !== -1) {
                        html = '<video src="' + url + '" ' +
                          'width="' + (width || 550) + '" height="' + (height || 400) + '"' +
                          ' controls="controls"></video>';
                    } else {
                        html = K.mediaImg(self.themesPath + 'common/blank.gif', {
                            src: url,
                            type: K.mediaType(url),
                            width: width,
                            height: height,
                            autostart: autostartBox[0].checked ? 'true' : 'false',
                            loop: 'true'
                        });
                    }

                    self.insertHtml(html);
                    self.sync();
                    self.hideDialog();
                }
            }
			}),
			div = dialog.div,
			urlBox = K('[name="url"]', div),
			viewServerBtn = K('[name="viewServer"]', div),
			widthBox = K('[name="width"]', div),
			heightBox = K('[name="height"]', div),
			autostartBox = K('[name="autostart"]', div);
			urlBox.val('http://');

			if (allowMediaUpload) {
          var uploadbutton = K.uploadbutton({
              button : K('.ke-upload-button', div)[0],
              fieldName : filePostName,
              extraParams : extraParams,
              url : K.addParam(uploadJson, 'dir=media'),
              afterUpload : function(data) {
                  // 注意：dialog 变量在外层函数中已定义，因此这里可以直接使用
                  dialog.hideLoading();

                  if (data.error === 0) {
                      var url = data.url;
                      if (formatUploadUrl) {
                          url = K.formatUrl(url, 'absolute');
                      }

                      // 取弹窗中宽高输入框的值（回退到默认值）
                      var w = widthBox.val() || 551;
                      var h = heightBox.val() || 400;

                      // 插入原生 <video> 标签
                      var videoHtml = '<video src="' + url + '" controls="controls" ' +
                        'width="' + w + '" height="' + h + '"></video><br/>';
                      self.insertHtml(videoHtml);

                      // 彻底移除/关闭弹窗（避免后续用户再点确定触发默认插入）
                      try {
                          console.log(1111)
                          dialog.remove(); // 推荐 remove()，也可以用 dialog.hide()
                      } catch (e) {
                          console.log(2222)
                          // 兜底：如果 dialog 不可用，用编辑器 API 隐藏当前对话框
                          try { self.hideDialog(); } catch (e2) {}
                      }

                      // 如果你还需要触发外部回调（保持兼容）
                      if (self.afterUpload) {
                          try { self.afterUpload.call(self, url, data, name); } catch (e) {}
                      }
                  } else {
                      alert(data.message);
                  }
              },
              afterError : function(html) {
                  // 如果 dialog 在作用域里则 hideLoading，否则用 self.errorDialog
                  try { dialog.hideLoading(); } catch (e) {}
                  self.errorDialog(html);
              }
          });
          uploadbutton.fileBox.change(function(e) {
              dialog.showLoading(self.lang('uploadLoading'));
              uploadbutton.submit();
          });
			} else {
				K('.ke-upload-button', div).hide();
			}

			if (allowFileManager) {
				viewServerBtn.click(function(e) {
					self.loadPlugin('filemanager', function() {
						self.plugin.filemanagerDialog({
							viewType : 'LIST',
							dirName : 'media',
							clickFn : function(url, title) {
								if (self.dialogs.length > 1) {
									K('[name="url"]', div).val(url);
									if (self.afterSelectFile) {
										self.afterSelectFile.call(self, url);
									}
									self.hideDialog();
								}
							}
						});
					});
				});
			} else {
				viewServerBtn.hide();
			}

			var img = self.plugin.getSelectedMedia();
			if (img) {
				var attrs = K.mediaAttrs(img.attr('data-ke-tag'));
				urlBox.val(attrs.src);
				widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0);
				heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0);
				autostartBox[0].checked = (attrs.autostart === 'true');
			}
			urlBox[0].focus();
			urlBox[0].select();
		},
		'delete' : function() {
			self.plugin.getSelectedMedia().remove();
			// [IE] 删除图片后立即点击图片按钮出错
			self.addBookmark();
		}
	};
	self.clickToolbar(name, self.plugin.media.edit);
});
